package com.emm.yixun.website.controller.marketing;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.emm.yixun.anotations.UserOperateLog;
import com.emm.yixun.common.enums.FunctionTypeEnum;
import com.emm.yixun.common.enums.ModelTypeEnum;
import com.emm.yixun.common.model.ProjectRoom;
import com.emm.yixun.common.model.User;
import com.emm.yixun.common.model.dto.BusinessCustomerInfo;
import com.emm.yixun.common.model.dto.MarketingRoomView;
import com.emm.yixun.common.model.dto.ProjectRoomDto;
import com.emm.yixun.common.model.dto.RoomFooterVo;
import com.emm.yixun.common.model.dto.RoomInfo;
import com.emm.yixun.common.model.dto.RoomMarketingQueryView;
import com.emm.yixun.common.response.Response;
import com.emm.yixun.common.response.ResponseList;
import com.emm.yixun.estate.service.ProjectRoomServiceFacade;
import com.emm.yixun.marketing.service.NeedReceiveRefundServiceFacade;
import com.emm.yixun.marketing.service.RoomMarketingServiceFacade;
import com.emm.yixun.system.service.MerchantServiceFacade;
import com.emm.yixun.website.common.ajax.AjaxRes;
import com.emm.yixun.website.common.utils.base.Const;
import com.emm.yixun.website.common.utils.security.ShiroUtil;
import com.emm.yixun.website.controller.base.BaseController;
import com.emm.yixun.website.vo.common.ExtResultVo;

/**
* 类描述： 房源销控
* 创建者： ThinkPad
* 项目名称： emm-website
* 创建时间： 2016年6月30日 下午5:29:04
* 版本号： v1.0
 */
@RequestMapping(value ="/marketing/room/")
@Controller
public class RoomMarketingController extends BaseController<ProjectRoom>{
	
	@Autowired
	private RoomMarketingServiceFacade roomMarketingServiceFacade;
	@Autowired
	private ProjectRoomServiceFacade projectRoomServiceFacade;
	@Autowired
	private NeedReceiveRefundServiceFacade needReceiveRefundServiceFacade;
	@Autowired
	private MerchantServiceFacade merchantServiceFacade;
	
	@RequestMapping(value="index")
	public ModelAndView index(HttpServletRequest request){
		User user = ShiroUtil.getCurrentUser();
		//认筹开关,默认未关闭
		boolean payDepositOff = false;
		Response<Boolean> response = merchantServiceFacade.merPayDepositOff(user.getMerchantId());
		if(response.isSuccess()){
			payDepositOff = response.getEntity();
		}
		return new ModelAndView("marketing/room/index")
		.addObject("menu", request.getParameter("menu"))
		.addObject("permitBtn", getPermissionBtnArray())
		.addObject("userName", user.getUserName())
		.addObject("payDepositOff", payDepositOff);
	}
	/**
	* 方法描述 : 房源销控树点击
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年7月1日 下午2:37:02
	* @param id
	* @return List<MarketingRoomView>
	 */
	@RequestMapping(value = "findMarketingList")
	public @ResponseBody AjaxRes findMarketingList(String buildingId,String unitId,String roomId,String resourcesCode){
		//验证是否有权限
		  AjaxRes res = new AjaxRes();
		 if(doSecurityIntercept(Const.RESOURCES_TYPE_BUTTON,"marketing:room:list")){
			 User user = ShiroUtil.getCurrentUser();
			 res.setObj(roomMarketingServiceFacade.findMarketingList(buildingId,unitId,roomId,resourcesCode,user.getId()));
			 res.setRes(Const.SUCCEED);
		 }else{
			 res.setRes(Const.NO_AUTHORIZED);
		 }
		return res;
	}
	/**
	* 方法描述 : 查询组团下面所有的楼栋
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年7月2日 上午9:32:32
	* @param dto
	* @return List<ProjectUnit>
	 */
	@RequestMapping(value = "findProjectBuilding")
	public @ResponseBody AjaxRes findProjectUnitByPreId(Long projectId,Long premises,Long buildingId,String resourcesCode){
		AjaxRes res = new AjaxRes();
		if(doSecurityIntercept(Const.RESOURCES_TYPE_BUTTON,"marketing:room:list")){
			User user = ShiroUtil.getCurrentUser();
			ResponseList<RoomMarketingQueryView> queryList = roomMarketingServiceFacade.treeNodeQuery(projectId,premises,buildingId,resourcesCode,user.getId());
			if(queryList.isSuccess()&&queryList.getEntity()!=null){
				 res.setObj(queryList.getEntity()) ;
			}
			res.setRes(Const.SUCCEED);
		}else{
			res.setRes(Const.NO_AUTHORIZED);
		}
	
		return res;
	}
	/**
	* 方法描述 : 车位车区信息
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年7月2日 上午11:25:04
	* @return MarketingRoomView
	 */
	@RequestMapping(value = "findCarInfo")
	public @ResponseBody List<MarketingRoomView> findCarInfo(Long areaId,Long carportId){
		return roomMarketingServiceFacade.findCarInfo(areaId, carportId);
	}
	/**
	* 方法描述 : 获取房间信息
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年7月4日 下午1:45:58
	* @param roomId
	* @return RoomInfo
	 */
	@RequestMapping(value = "findRoomInfo")
	@UserOperateLog(functionName=FunctionTypeEnum.FUNCTIONTYPE_2,modelName=ModelTypeEnum.MODELTYPE_1,roomKey="roomId")
	public @ResponseBody ExtResultVo findRoomInfo(Long roomId){
		ExtResultVo vo = new ExtResultVo();
		RoomInfo info = roomMarketingServiceFacade.getRoomInfo(roomId);
		vo.setData(info);
		vo.setSuccess(true);
	 return vo;
	}
	/**
	* 方法描述 : 页脚统计房间各状态数量
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年7月5日 上午10:37:35
	* @param room
	* @return List<RoomFooterVo>
	 */
	@RequestMapping(value = "findRoomFooter")
	public @ResponseBody List<RoomFooterVo>  findRoomFooter(ProjectRoomDto room){
	    if(room.getProjectId() == null && room.getPremisesId() == null && 
	            room.getBuildingId() == null && room.getUnitId() == null && 
	            room.getId() == null){
            return new ArrayList<RoomFooterVo>();
        }
		User user = ShiroUtil.getCurrentUser();
		room.setPermissionUserId(user.getId());
		return roomMarketingServiceFacade.getRoomNumber(room);
	}

	@RequestMapping(value = "findRoomById")
	public @ResponseBody ProjectRoom findRoomById(Long id){
		Response<ProjectRoom> response = projectRoomServiceFacade.findById(id);
		if(response.isSuccess()){
			return response.getEntity();
		}
		return null;
	}
	/**
	* 方法描述 : 验证应收是否已经收完
	* 创建者：ThinkPad 
	* 项目名称： emm-website
	* 类名： RoomMarketingController.java
	* 版本： v1.0
	* 创建时间： 2016年8月17日 下午4:47:47
	* @param payId
	* @param subId
	* @return Map<String,String>
	 */
	@RequestMapping(value = "vaildNeedReceive")
	public @ResponseBody Map<String, String> vaildNeedReceive(Long payId,Long subId){
		Response<Boolean> response = needReceiveRefundServiceFacade.vaildNeedReceive(payId, subId);
		Map<String, String> map = new HashMap<String, String>();
		if(response.getEntity()){
			map.put("result", "0");
		}else{
			map.put("result", "1");
			map.put("msg", response.getResultMessage());
		}
		return map;
	}
	@RequestMapping(value = "findBusCustomerInfo")
	public @ResponseBody List<BusinessCustomerInfo> findBusCustomerInfo(Long roomId,String businessCode){
		return roomMarketingServiceFacade.findBusinessCustomerInfo(ShiroUtil.getCurrentUser(), roomId, businessCode);
	}
	
	/**
	* 方法描述 : 认购套数、金额、占比、签约套数、金额、占比的信息
	* @param id
	* @return List<MarketingRoomView>
	 */
	@RequestMapping(value = "findProportion")
	public @ResponseBody AjaxRes findProportion(Long projectId, Long premisesId, Long buildingId, 
				Long unitId, Long roomId,String resourcesCode){
			//验证是否有权限
			AjaxRes res = new AjaxRes();
			try {
				if(projectId == null && premisesId == null && buildingId == null && 
						unitId == null && roomId == null){
					res.setRes(Const.NO_AUTHORIZED);
				}
				if (doSecurityIntercept(Const.RESOURCES_TYPE_BUTTON, "marketing:room:list")) {
					User user = ShiroUtil.getCurrentUser();
					res.setObj(roomMarketingServiceFacade.findProportion(projectId, premisesId, buildingId, unitId, roomId,
							resourcesCode, user.getId()));
					res.setRes(Const.SUCCEED);
				} else {
					res.setRes(Const.NO_AUTHORIZED);
				} 
			} catch (Exception e) {
				logger.error("获取认购套数、金额、占比、签约套数、金额、占比失败", e);
			}
			return res;
		}
}
